SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
CREATE PROCEDURE [dbo].[spUtilizacionPresupuestaria]

@Ejercicio INT,
@Fecha VARCHAR(10)

AS
SET NOCOUNT ON
CREATE TABLE #Temp 
	(
	Limite INT, 
	Plazas INT,
	Servicios INT
	)

-- Cargos PP
INSERT #Temp SELECT 
(SELECT IdLimitePresupuestario FROM tb_LimitesPresupuestarios WHERE Ejercicio = @Ejercicio AND UnidadDeMedida = 1 AND PartidaGenerica = 1), 
(select count(*) CantPlazas from tb_plazas where idplaza in (select distinct idplaza from tb_plazas p inner join tb_subserviciosagentes ss on ss.plaza = p.idplaza where @fecha between ss.fechaalta and isnull(ss.fechabaja, getdate()) and ss.situacionextraordinaria = 1 and p.regimensalarial = 12 and p.presupuesto = 1 and @fecha between p.fechaalta and isnull(p.fechabaja, getdate()))), 
(select count(*) CantServiciosEstables from tb_plazas where idplaza in (select idplaza from tb_plazas p inner join tb_subserviciosagentes ss on ss.plaza = p.idplaza inner join tb_serviciosagentes s on s.idservicioagente = ss.servicioagente inner join tb_cargos c on c.idcargo = s.cargosalarial where @fecha between ss.fechaalta and isnull(ss.fechabaja, getdate()) and s.situacionrevista in(1, 2) and c.regimensalarial = 12 and s.presupuesto = 1 and @fecha between p.fechaalta and isnull(p.fechabaja, getdate())))

-- Horas Sec PP
INSERT #Temp SELECT 
(SELECT IdLimitePresupuestario FROM tb_LimitesPresupuestarios WHERE Ejercicio = @Ejercicio AND UnidadDeMedida = 2 AND Cargo = 3001 AND PartidaGenerica = 1), 
(select sum(horas) CantPlazas from tb_plazas where idplaza in (select distinct idplaza from tb_plazas p inner join tb_subserviciosagentes ss on ss.plaza = p.idplaza where @fecha between ss.fechaalta and isnull(ss.fechabaja, getdate()) and ss.situacionextraordinaria = 1 and p.regimensalarial = 13 and p.cargosalarialdefault = 3001 and p.presupuesto = 1 and @fecha between p.fechaalta and isnull(p.fechabaja, getdate()))), 
(select sum(horas) CantServiciosEstables from tb_serviciosagentes where idservicioagente in (select servicioagente from tb_plazas p inner join tb_subserviciosagentes ss on ss.plaza = p.idplaza inner join tb_serviciosagentes s on s.idservicioagente = ss.servicioagente inner join tb_cargos c on c.idcargo = s.cargosalarial where @fecha between ss.fechaalta and isnull(ss.fechabaja, getdate()) and s.situacionrevista in(1, 2) and c.regimensalarial = 13 and s.cargosalarial = 3001 and s.presupuesto = 1 and @fecha between p.fechaalta and isnull(p.fechabaja, getdate())))

-- Horas Ter PP
INSERT #Temp SELECT 
(SELECT IdLimitePresupuestario FROM tb_LimitesPresupuestarios WHERE Ejercicio = @Ejercicio AND UnidadDeMedida = 2 AND Cargo = 4001 AND PartidaGenerica = 1), 
(select sum(horas) CantPlazas from tb_plazas where idplaza in (select distinct idplaza from tb_plazas p inner join tb_subserviciosagentes ss on ss.plaza = p.idplaza where @fecha between ss.fechaalta and isnull(ss.fechabaja, getdate()) and ss.situacionextraordinaria = 1 and p.regimensalarial = 13 and p.cargosalarialdefault = 4001 and p.presupuesto = 1 and @fecha between p.fechaalta and isnull(p.fechabaja, getdate()))), 
(select sum(horas) CantServiciosEstables from tb_serviciosagentes where idservicioagente in (select servicioagente from tb_plazas p inner join tb_subserviciosagentes ss on ss.plaza = p.idplaza inner join tb_serviciosagentes s on s.idservicioagente = ss.servicioagente inner join tb_cargos c on c.idcargo = s.cargosalarial where @fecha between ss.fechaalta and isnull(ss.fechabaja, getdate()) and s.situacionrevista in(1, 2) and c.regimensalarial = 13 and s.cargosalarial = 4001 and s.presupuesto = 1 and @fecha between p.fechaalta and isnull(p.fechabaja, getdate())))

-- Puntos PP
INSERT #Temp SELECT 
(SELECT IdLimitePresupuestario FROM tb_LimitesPresupuestarios WHERE Ejercicio = @Ejercicio AND UnidadDeMedida = 3 AND PartidaGenerica = 1), 
(select sum(puntos) CantPlazas from tb_plazas inner join tb_cargos on idcargo = cargosalarialdefault where idplaza in (select distinct idplaza from tb_plazas p inner join tb_subserviciosagentes ss on ss.plaza = p.idplaza where @fecha between ss.fechaalta and isnull(ss.fechabaja, getdate()) and ss.situacionextraordinaria = 1 and p.presupuesto = 1 and @fecha between p.fechaalta and isnull(p.fechabaja, getdate()))), 
(select sum(puntos) CantServiciosEstables from tb_serviciosagentes inner join tb_cargos on idcargo = cargosalarial where idservicioagente in (select servicioagente from tb_plazas p inner join tb_subserviciosagentes ss on ss.plaza = p.idplaza inner join tb_serviciosagentes s on s.idservicioagente = ss.servicioagente inner join tb_cargos c on c.idcargo = s.cargosalarial where @fecha between ss.fechaalta and isnull(ss.fechabaja, getdate()) and s.situacionrevista in(1, 2) and s.presupuesto = 1 and @fecha between p.fechaalta and isnull(p.fechabaja, getdate())))

SELECT T.*, LP.*, U.Descripcion DUnidadDeMedida FROM #Temp T INNER JOIN tb_LimitesPresupuestarios LP ON LP.IdLimitePresupuestario = T.Limite 
INNER JOIN tb_UnidadesDeMedidaDeLimitesPresupuestarios U ON U.IdUnidadDeMedida = LP.UnidadDeMedida

DROP TABLE #Temp

/*
-------POR
-- 1: Por Provincia
-- 2: Por Nivel
-- 3: Por Escuela

@por INT,
@fuente INT,
@fecha Varchar(10),
@nivel INT,
@org INT

AS

DECLARE @cantcargos INT
DECLARE @canthorasp INT
DECLARE @canthorass INT

IF @por = 1 BEGIN
	
	print 'Pasa por aca'
	-- Obtengo la cantidad de cargos --
	select @cantcargos = (select count(*) from tb_serviciosagentes as s
	inner join tb_cargos c on c.idcargo = s.cargosalarial
	where s.financiamiento = @fuente and
	s.tipodeservicio = 1 and
	s.regimenlaboral = 12 and
	c.regimensalarial = 12 and
	(s.situacionrevista = 1 or s.situacionrevista = 2) and
	@fecha between s.fechaalta and isnull(s.fechabaja, getdate()))

	-- Obtengo la cantidad de horas P
	select @canthorasp = (select isnull(sum(s.horas), 0) from tb_serviciosagentes as s
	inner join tb_cargos c on c.idcargo = s.cargosalarial
	where s.financiamiento = @fuente and
	s.tipodeservicio = 1 and
	s.regimenlaboral = 12 and 
	c.regimensalarial = 13 and
	(s.situacionrevista = 1 or s.situacionrevista = 2) and
	@fecha between s.fechaalta and isnull(s.fechabaja, getdate()) 
	and
	(s.cargosalarial = 3001 or s.cargosalarial = 2901))

	-- Obtengo la cantidad de horas S
	select @canthorass = (select isnull(sum(s.horas), 0) from tb_serviciosagentes as s
	inner join tb_cargos c on c.idcargo = s.cargosalarial
	where s.financiamiento = @fuente and
	s.tipodeservicio = 1 and
	s.regimenlaboral = 12 and
	c.regimensalarial = 13 and
	(s.situacionrevista = 1 or s.situacionrevista = 2) and
	@fecha between s.fechaalta and isnull(s.fechabaja, getdate()) 
	and
	(s.cargosalarial = 4001 or s.cargosalarial = 6001))

	select @cantcargos as Cargos, @canthorasp as HorasP, @canthorass as HorasS
END
ELSE IF @por = 2 BEGIN

	-- Obtengo la cantidad de cargos --
	SELECT @cantcargos = (select count(*) from tb_serviciosagentes as s 
	inner join tb_organizaciones as o on s.ubicacionorig = o.idorganizaciones
	inner join tb_suborganizaciones as so on so.org = o.idorganizaciones
	inner join tb_cargos c on c.idcargo = s.cargosalarial
	where s.financiamiento = @fuente and
	s.tipodeservicio = 1 and
	s.regimenlaboral = 12 and
	c.regimensalarial = 12 and
	(s.situacionrevista = 1 or s.situacionrevista = 2) and
	@fecha between s.fechaalta and isnull(s.fechabaja, getdate()) 
	and so.nivel = @nivel)
	
	-- Obtengo la cantidad de horas P
	select @canthorasp = (select isnull(sum(s.horas), 0) from tb_serviciosagentes as s
	inner join tb_organizaciones as o on o.idorganizaciones = s.ubicacionorig
	inner join tb_suborganizaciones as so on so.org = o.idorganizaciones
	inner join tb_cargos c on c.idcargo = s.cargosalarial
	where s.financiamiento = @fuente and
	s.tipodeservicio = 1 and
	s.regimenlaboral = 12 and
	c.regimensalarial = 13 and
	(s.situacionrevista = 1 or s.situacionrevista = 2) and
	@fecha between s.fechaalta and isnull(s.fechabaja, getdate()) 
	and (s.cargosalarial = 3001 OR s.cargosalarial = 2901) 
	and so.nivel = @nivel)

	-- Obtengo la cantidad de horas S
	select @canthorass = (select isnull(sum(s.horas), 0) from tb_serviciosagentes as s
	inner join tb_organizaciones as o on o.idorganizaciones = s.ubicacionorig
	inner join tb_suborganizaciones as so on so.org = o.idorganizaciones
	inner join tb_cargos c on c.idcargo = s.cargosalarial
	where s.financiamiento = @fuente and
	s.tipodeservicio = 1 and
	s.regimenlaboral = 12 and
	c.regimensalarial = 13 and
	(s.situacionrevista = 1 or s.situacionrevista = 2) and
	@fecha between s.fechaalta and isnull(s.fechabaja, getdate()) 
	and  (s.cargosalarial = 4001 OR s.cargosalarial = 6001) and so.nivel = @nivel)

	select @cantcargos as Cargos, @canthorasp as HorasP, @canthorass as HorasS	

END
ELSE IF @por = 3 BEGIN
	
	print  'POR ORGANIZACION'
	-- Obtengo la cantidad de cargos --
	SELECT @cantcargos = (select count(*) from tb_serviciosagentes as s 
	inner join tb_organizaciones as o on s.ubicacionorig = o.idorganizaciones
	inner join tb_suborganizaciones as so on so.org = o.idorganizaciones
	inner join tb_cargos c on c.idcargo = s.regimensalarial
	where s.financiamiento = @fuente and
	s.tipodeservicio = 1 and
	s.regimenlaboral = 12 and
	c.regimensalarial = 12 and
	(s.situacionrevista = 1 or s.situacionrevista = 2) and
	@fecha between s.fechaalta and isnull(s.fechabaja, getdate()) 
	and so.nivel = @nivel and so.org = @org)


	-- Obtengo la cantidad de horas P
	select @canthorasp = (select isnull(sum(s.horas), 0) from tb_serviciosagentes as s
	inner join tb_organizaciones as o on o.idorganizaciones = s.ubicacionorig
	inner join tb_suborganizaciones as so on so.org = o.idorganizaciones
	inner join tb_cargos c on c.idcargo = s.cargosalarial
	where s.financiamiento = @fuente and
	s.tipodeservicio = 1 and
	s.regimenlaboral = 12 and
	c.regimensalarial = 13 and
	(s.situacionrevista = 1 or s.situacionrevista = 2) and
	@fecha between s.fechaalta and isnull(s.fechabaja, getdate()) and
	(s.cargosalarial = 3001 OR s.cargosalarial = 2901) and so.nivel = @nivel and so.org = @org)

	
	-- Obtengo la cantidad de horas S
	select @canthorass = (select isnull(sum(s.horas), 0) from tb_serviciosagentes as s
	inner join tb_organizaciones as o on o.idorganizaciones = s.ubicacionorig
	inner join tb_suborganizaciones as so on so.org = o.idorganizaciones
	inner join tb_cargos c on c.idcargo = s.cargosalarial
	where s.financiamiento = @fuente and
	s.tipodeservicio = 1 and
	s.regimenlaboral = 12 and
	c.regimensalarial = 13 and
	(s.situacionrevista = 1 or s.situacionrevista = 2) and
	@fecha between s.fechaalta and isnull(s.fechabaja, getdate()) and
	(s.cargosalarial = 4001 OR s.cargosalarial = 2901) and
	so.nivel = @nivel and so.org = @org)

	select @cantcargos as Cargos, @canthorasp as HorasP, @canthorass as HorasS	

END
*/
GO
